#I Import and Initialize
import pygame
from pygame.locals import *
from data import *
from sprites import *



#############################################################################
# Represents a level loaded from a given file.
#############################################################################
class Level:
    


    #############################################################################
    # Initializes a new instance of Level.
    #############################################################################
    def __init__(self, player, lvl=1):
        #E Entities
        self.level      = pygame.image.load(filepath(("level%d.png" % lvl))).convert()
        self.rect       = self.level.get_rect()
        
        #A Assign
        self.sprites    = []
        self.x = 0
        self.y = 0
        
        #A Action
        for y in range(self.level.get_height()):
            self.y = y
            for x in range(self.level.get_width()):
                self.x = x
                color = self.level.get_at((self.x, self.y))
                if color == (0, 0, 0, 255):
                    SolidObject((self.x*32, self.y*32), "grass")
                if color == (255, 200, 0, 255):
                    SolidObject((self.x*32, self.y*32), "brick")
                if color == (255, 106, 0, 255):
                    SolidObject((self.x*32, self.y*32), "water")
                if color == (38, 127, 0, 255):
                    SolidObject((self.x*32, self.y*32), "bush")
                if color == (0, 38, 255, 255):
                    Enemy((self.x*32, self.y*32), player, "cannon", "left")
                if color == (87, 0, 127, 255):
                    NonSolidObject((self.x*32, self.y*32), "cloud")
                if color == (0, 255, 8, 255):
                    NonSolidObject((self.x*32, self.y*32), "finish")
                if color == (255, 72, 0, 255):
                    FinishLine((self.x*32, self.y*32))
                if color == (0, 255, 255, 255):
                    Enemy((self.x*32, self.y*32), player, "cannon", "right")
                if color == (255, 0, 220, 255):
                    Enemy((self.x*32, self.y*32), player, "gunner", "left")
                if color == (255, 0, 0, 255):
                    Enemy((self.x*32, self.y*32), player, "gunner", "right")
                if color == (96, 96, 96, 255):
                    LiveUp((self.x*32, self.y*32))
    


    #############################################################################
    # Gets a color at a specific position within the source image.
    #############################################################################                
    def get_at(self, dx, dy):
        try:
            return self.level.get_at((self.x+dx, self.y+dy))
        except:
            pass
    


    #############################################################################
    # Gets this level's size.
    #############################################################################   
    def get_size(self):
        return [self.level.get_size()[0]*32, self.level.get_size()[1]*32]
    


    #############################################################################
    # Gets a rect which represents the size of this level.
    #############################################################################    
    def get_rect(self):
        return self.rect
    


    #############################################################################
    # Gets a surface based on this level's rect.
    #############################################################################
    def get_surface(self):
        return pygame.Surface(self.rect.size)
    


    #############################################################################
    # Gets this level's sprites.
    #############################################################################    
    def get_sprites(self):
        return self.sprites